// vite-plugin-remove-console.js

export default function removeConsolePlugin() {
  return {
    name: "vite-plugin-remove-console", // 插件的名称,这是插件的标识，用于调试或日志输出等
    // transform：这是 Vite 提供的钩子函数，用于对文件内容进行转换。在这里，它接受两个参数：
    // code：当前文件的内容（源代码），是一个字符串。
    // id：当前文件的路径或标识符。
    transform(code, id) {
      // 仅处理 JavaScript 文件
      // 这里判断当前处理的文件是否是 .js 或 .ts 文件。如果是其他类型的文件（如 .css 或 .html），则不会执行后续的移除操作
      if (id.endsWith(".js") || id.endsWith(".ts")) {
        // 移除所有 console.log 的代码
        // 使用正则表达式 console\.log\(.*\);? 来匹配所有的 console.log() 语句。
        // console\.log：匹配字符串 console.log，注意 . 是正则表达式中的特殊字符，所以需要用 \ 转义。
        // \(.*\)：匹配圆括号中的内容，.* 表示匹配任意字符（包括空字符）任意次。
        // ;?：匹配可选的分号，考虑到一些 console.log 语句可能没有分号结尾。
        // g：表示全局匹配，会移除代码中所有的 console.log 语句，而不仅仅是第一个。
        const result = code.replace(/console\.log\(.*\);?/g, "");
        // code: result：返回处理后的代码，已经移除了所有的 console.log 语句。
        // map: null：这里选择不生成 source map。如果需要支持源映射，可以生成对应的 source map。
        return {
          code: result,
          map: null, // 可以选择生成 source map，或者返回 null
        };
      }
    },
  };
}
